package leetcode.editor.cn;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: Dempsey
 * @Data: 2021-03-17 08:21:06
 */

//给定一种规律 pattern 和一个字符串 str ，判断 str 是否遵循相同的规律。 
//
// 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。 
//
// 示例1: 
//
// 输入: pattern = "abba", str = "dog cat cat dog"
//输出: true 
//
// 示例 2: 
//
// 输入:pattern = "abba", str = "dog cat cat fish"
//输出: false 
//
// 示例 3: 
//
// 输入: pattern = "aaaa", str = "dog cat cat dog"
//输出: false 
//
// 示例 4: 
//
// 输入: pattern = "abba", str = "dog dog dog dog"
//输出: false 
//
// 说明: 
//你可以假设 pattern 只包含小写字母， str 包含了由单个空格分隔的小写字母。 
// Related Topics 哈希表 
// 👍 316 👎 0


public class P290 {
    public static void main(String[] args) {
        Solution solution = new P290().new Solution();
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public boolean wordPattern(String pattern, String s) {
            char[] chars = pattern.toCharArray();
            String[] split = s.split(" ");

            if (chars.length != split.length) {
                return false;
            }

            Map<Character, String> map = new HashMap<>();
            Map<String, Character> map2 = new HashMap<>();

            for (int i = 0; i < chars.length; i++) {
                char c = chars[i];
                String ss = split[i];

                if (!map.containsKey(c)) {
                    map.put(c, ss);
                } else {
                    if (!map.get(c).equals(ss)) {
                        return false;
                    }
                }

                if (!map2.containsKey(ss)) {
                    map2.put(ss, c);
                } else {
                    if (!map2.get(ss).equals(c)) {
                        return false;
                    }
                }
            }

            return true;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}